#ifndef DependencyPipe4OGTSibling_H
#define DependencyPipe4OGTSibling_H
#include"DependencyPipe3O.h"

class DependencyPipe4OGTSibling : public DependencyPipe3O{
protected:
	void addGrandTriTripFeatures(DependencyInstance *instance, int gpar, int par, int ch1, int ch2, int ch3, FeatureVector *fv);

	virtual void addExtendedFeatures(DependencyInstance *instance, FeatureVector *fv);

	virtual void writeExtendedFeatures(DependencyInstance *instance, ObjectWriter &out);

public:
	DependencyPipe4OGTSibling(ParserOptions *options);

	void fillFeatureVectors(DependencyInstance* instance, vector<vector<vector<double> > > &probs, 
		vector<vector<vector<double> > > &probs_trips, vector<vector<vector<double> > > &probs_sibs, 
		vector<vector<vector<double> > > &probs_grands, vector<vector<double> > &probs_gchs, 
		vector<vector<vector<vector<double> > > > &probs_gtrips, vector<vector<vector<vector<double> > > > &probs_gsibs, 
		vector<vector<vector<double> > > &probs_coords, vector<vector<vector<vector<double> > > > &probs_ttrips, 
		vector<vector<vector<vector<double> > > > &probs_tsibs, vector<vector<vector<vector<vector<double> > > > > &probs_gttrips,
		vector<vector<vector<vector<double> > > > &nt_probs, Parameters* params);

	DependencyInstance* readInstance(ObjectReader &in, int length, vector<vector<vector<double> > > &probs, 
		vector<vector<vector<double> > > &probs_trips, vector<vector<vector<double> > > &probs_sibs, 
		vector<vector<vector<double> > > &probs_grands, vector<vector<double> > &probs_gchs, 
		vector<vector<vector<vector<double> > > > &probs_gtrips, vector<vector<vector<vector<double> > > > &probs_gsibs, 
		vector<vector<vector<double> > > &probs_coords, vector<vector<vector<vector<double> > > > &probs_ttrips, 
		vector<vector<vector<vector<double> > > > &probs_tsibs, vector<vector<vector<vector<vector<double> > > > > &probs_gttrips,
		vector<vector<vector<vector<double> > > > &nt_probs, Parameters* params);

	virtual ~DependencyPipe4OGTSibling();
};
#endif
